package innova.dao;

import innova.modelo.CriterioCobranza;
import innova.util.ConexionBD;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

public class CriterioCobranzaDAO extends BaseDAO {

	// private int idCriterioCobranza;
	// private int mayorCantidadIdea;
	// private float precioUnitario;
	// private List<Cobranza> cobranzas;

	public Collection<CriterioCobranza> buscarPorTitulo(String titulo) throws Exception {
		String query = "select"
				+ " idCriterioCobranza, "
				+ " mayorCantidadIdea, " 
				+ " precioUnitario "
				+ " from CriterioCobranza " 
				+ " order by idCriterioCobranza"; //Falta el titulo
		Collection<CriterioCobranza> lista = new ArrayList<CriterioCobranza>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, "%" + titulo + "%");
			rs = stmt.executeQuery();
			while (rs.next()) {
				CriterioCobranza vo = new CriterioCobranza();
				vo.setIdCriterioCobranza(rs.getInt("idCriterioCobranza"));
				vo.setMayorCantidadIdea(rs.getInt("mayorCantidadIdea"));
				vo.setPrecioUnitario(rs.getFloat("precioUnitario"));
				lista.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new Exception(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		System.out.println(lista.size());
		return lista;
	}

	public CriterioCobranza insertar(CriterioCobranza vo) throws Exception {
		String query = "insert into CriterioCobranza("
				+ " mayorCantidadIdea, "
				+ " precioUnitario" 
				+ " ) " 
				+ " values (?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, vo.getMayorCantidadIdea());
			stmt.setFloat(2, vo.getPrecioUnitario());

			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new Exception(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	public CriterioCobranza obtener(int idCriterioCobranza) throws Exception {
		CriterioCobranza vo = new CriterioCobranza();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select"
					+ " idCriterioCobranza, "
					+ " mayorCantidadIdea, "
					+ " precioUnitario "
					+ " from CriterioCobranza "
					+ " where idCriterioCobranza = ? "
					+ " order by idCriterioCobranza";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idCriterioCobranza);
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo.setIdCriterioCobranza(rs.getInt("idCriterioCobranza"));
				vo.setMayorCantidadIdea(rs.getInt("mayorCantidadIdea"));
				vo.setPrecioUnitario(rs.getFloat("precioUnitario"));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new Exception(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	public void eliminar(int idCriterioCobranza) throws Exception {
		String query = "delete from CriterioCobranza "
				+ " where idCriterioCobranza = ?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idCriterioCobranza);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new Exception(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	// public CriterioCobranza actualizar(CriterioCobranza vo) throws Exception
	// {
	// String query =
	// "update CriterioCobranza set nombre=?,descripcion=? where id_CriterioCobranza=?";
	// Connection con = null;
	// PreparedStatement stmt = null;
	// try {
	// con = ConexionBD.obtenerConexion();
	// stmt = con.prepareStatement(query);
	// stmt.setString(1, vo.getNombre());
	// stmt.setString(2, vo.getDescripcion());
	// stmt.setInt(3, vo.getidCriterioCobranza());
	// int i = stmt.executeUpdate();
	// if (i != 1) {
	// throw new SQLException("No se pudo actualizar");
	// }
	// } catch (SQLException e) {
	// System.err.println(e.getMessage());
	// throw new Exception(e.getMessage());
	// } finally {
	// this.cerrarStatement(stmt);
	// this.cerrarConexion(con);
	// }
	// return vo;
	// }

	public Collection<CriterioCobranza> listar() throws Exception {
		Collection<CriterioCobranza> c = new ArrayList<CriterioCobranza>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "select"
					+ " idCriterioCobranza, "
					+ " mayorCantidadIdea, "
					+ " precioUnitario "
					+ " from CriterioCobranza "
					+ " order by mayorCantidadIdea";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				CriterioCobranza vo = new CriterioCobranza();
				vo.setIdCriterioCobranza(rs.getInt("idCriterioCobranza"));
				vo.setMayorCantidadIdea(rs.getInt("mayorCantidadIdea"));
				vo.setPrecioUnitario(rs.getFloat("precioUnitario"));
				c.add(vo);
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new Exception(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}

}
